﻿using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace ImClient {
    // 用户列表视图
    class UserListView: ListView {
        private readonly List<Bitmap> mGrayIconList;    // 灰色图标列表
        private readonly List<Bitmap> mNormalIconList;  // 正常图标列表

        /**
         * 构造方法。 
         */
        public UserListView() {
            // 初始化成员
            mGrayIconList = new List<Bitmap>(Const.ICON_COUNT);
            mNormalIconList = new List<Bitmap>(Const.ICON_COUNT);
        }

        /**
         * 添加一个表项。
         * @param itemText  表项文字
         * @param iconIndex 图标索引
         * @param colorful  彩色则为 true，灰色则为 false
         */
        public void AddItem(string itemText, int iconIndex, bool colorful) {
            // 添加正常图标
            string iconFilePath = string.Format(Const.ICON_FILE_PATH, iconIndex);
            Bitmap normalIcon = new Bitmap(iconFilePath);
            mNormalIconList.Add(normalIcon);

            // 添加灰色图标
            Bitmap grayIcon = new Bitmap(normalIcon);
            Graphics drawer = Graphics.FromImage(grayIcon);
            ControlPaint.DrawImageDisabled(drawer, grayIcon, 0, 0, Color.Transparent);
            mGrayIconList.Add(grayIcon);

            // 添加图标
            if (colorful) {
                SmallImageList.Images.Add(normalIcon);
            } else {
                SmallImageList.Images.Add(grayIcon);
            }

            // 添加表项
            ListViewItem item = new ListViewItem(itemText, 0);
            Items.Add(item);
        }

        /**
         * 改变某个表项的图标颜色。
         * @param itemText  表项的文字
         * @param colorful  彩色则为 true，灰色则为 false
         */
        public void ChangeItemColor(string itemText, bool colorful) {
            // 查找表项
            ListViewItem item  = base.FindItemWithText(itemText);
            if (item == null) {
                return;
            }

            // 设置图标颜色
            Bitmap icon = colorful ? mNormalIconList[item.Index]: mGrayIconList[item.Index];
            SmallImageList.Images[item.Index] = icon;
            base.RedrawItems(item.Index, item.Index, false);
        }
    }
}
